#
# Copyright 2004-present Facebook. All Rights Reserved.
#

namespace py neteng.fboss.test.production_features
namespace py3 neteng.fboss.test
namespace py.asyncio neteng.fboss.test.asyncio.production_features
namespace cpp2 facebook.fboss.test.production_features
namespace go neteng.fboss.test.production_features
namespace php fboss_test_production_features

enum ProductionFeature {
  VOQ = 0,
  FABRIC = 1,
  CPU_RX_TX = 2,
  L3_FORWARDING = 3,
  ACL_PORT_IN_DISCARDS_COUNTER = 4,
  NULL_ROUTE_IN_DISCARDS_COUNTER = 5,
  EGRESS_FORWARDING_DISCARDS_COUNTER = 6,
  PRBS = 7,
  COPP = 8,
  LAG = 9,
  DSCP_REMARKING = 10,
  L3_QOS = 11,
  ACL_COUNTER = 12,
  ECMP_LOAD_BALANCER = 13,
  LAG_LOAD_BALANCER = 14,
  VOQ_DNX_INTERRUPTS = 15,
  SINGLE_ACL_TABLE = 16,
  MULTI_ACL_TABLE = 17,
  BTH_OPCODE_ACL = 18,
  DLB = 19,
  ECN = 20,
  WRED = 21,
  QUEUE_PER_HOST = 22,
  JUMBO_FRAMES = 23, // Misc
  TRAP_DISCARDS_COUNTER = 24,
  MAC_LEARNING = 25,
  SCHEDULER_PPS = 26,
  ROUTE_COUNTERS = 27,
  PORT_TX_DISABLE = 28, // Misc
  SFLOWv4_SAMPLING = 29,
  SFLOWv6_SAMPLING = 30,
  MIRROR_PACKET_TRUNCATION = 31,
  WIDE_ECMP = 32,
  INTERFACE_NEIGHBOR_TABLE = 33,
  INGRESS_MIRRORING = 34,
  EGRESS_MIRRORING = 35,
  RSW_ROUTE_SCALE = 36, // Misc
  FSW_ROUTE_SCALE = 37, // Misc
  HGRID_DU_ROUTE_SCALE = 38, // Misc
  HGRID_UU_ROUTE_SCALE = 39, // Misc
  HUNDRED_THOUSAND_ROUTE_SCALE = 40, // Misc
  TH_ALPM_ROUTE_SCALE = 41,
  PFC = 42,
  UDF_WR_IMMEDIATE_ACL = 43,
  VLAN = 44,
  PORT_MTU_ERROR_TRAP = 45,
  LED_PROGRAMMING = 46,
  PFC_CAPTURE = 47,
  LINERATE_SFLOW = 48,
  MIRROR_ON_DROP = 49,
  PAUSE = 50,
  SEPARATE_INGRESS_EGRESS_BUFFER_POOL = 51,
  NIF_POLICER = 52,
  ERSPANV6_MIRRORING = 53,
  IP_IN_IP_DECAP = 54,
  LAG_MIRRORING = 55,
  INGRESS_ACL_MIRRORING = 56,
  EGRESS_ACL_MIRRORING = 57,
  SFLOW_SAMPLES_PACKING = 58,
  CLASS_ID_FOR_CONNECTED_ROUTE = 59,
  SEPARATE_BYTE_AND_PACKET_ACL_COUNTERS = 60,
  NETWORKAI_QOS = 61,
  EAPOL_TRAP = 62,
  UCMP = 63,
  MULTICAST_QUEUE = 64,
  MMU_TUNING = 65,
  OLYMPIC_QOS = 66,
  UNTRUNCATED_SFLOW = 67,
  MPLS = 68,
  PTP_TC = 69,
  SELF_HEALING_ECMP_LAG = 70,
  L4_DST_PORT_ACL = 71,
  MODIFY_ACL_QUALIFIERS = 72,
  ERSPANv4_SAMPLING = 73,
  ERSPANv6_SAMPLING = 74,
  GLOBAL_TC_RATE_LIMIT = 75,
  COPP_SHAPER = 76,
  COPP_SCHEDULER = 77,
  ECMP_RANDOM_SPRAY = 78,
  PTP_TC_PROVISIONING_TIME_HW_VALIDATION = 79,
  PFC_WATCHDOG_GRANULARITY = 80,
  ARS_FLOWLET = 81,
  ARS_SPRAY = 82,
  ROUTER_INTERFACE_COUNTERS = 83,
  STATIC_PG_SHARED_LIMIT = 84,
  HIGH_FREQUENCY_CPU_POLLING_STATS = 85,
  CLASS_ID_FOR_NEIGHBOR = 86,
  UDF_HASH = 87,
  INTER_PACKET_GAP = 88,
  AM_IDLES = 89,
  ALTERNATE_ARS_MEMBERS = 90,
  EGRESS_MIRROR_PACKET_TRUNCATION = 91,
  PFC_RX_DURATION = 92,
  PFC_TX_DURATION = 93,
  L2_QOS = 94,
  # production feature which is present on all platforms, keep it at the end
  HW_SWITCH = 65536,
}

struct AsicToProductionFeatures {
  1: map<string, list<ProductionFeature>> asicToFeatures;
  2: map<string, list<string>> asicToFeatureNames;
}
